package cn.com.twoke.app.pin_dou_dou.utils;

import java.awt.*;

/**
 * 图形操作工具类
 */
public class GraphicsUtils {

    /**
     * 为Graphics2D对象启用抗锯齿渲染
     * @param g2d 要配置的Graphics2D对象
     */
    public static void enableAntialiasing(Graphics2D g2d) {
        if (g2d != null) {
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
        }
    }

    /**
     * 在指定的矩形区域内居中绘制文本
     * @param g2d Graphics2D对象
     * @param text 要绘制的文本
     * @param x 矩形区域左上角的x坐标
     * @param y 矩形区域左上角的y坐标
     * @param width 矩形区域的宽度
     * @param height 矩形区域的高度
     */
    public static void drawCenteredString(Graphics2D g2d, String text, int x, int y, int width, int height) {
        if (g2d == null || text == null) {
            return;
        }
        
        FontMetrics metrics = g2d.getFontMetrics();
        int textWidth = metrics.stringWidth(text);
        int textHeight = metrics.getHeight();
        
        // 计算文本居中位置
        int textX = x + (width - textWidth) / 2;
        int textY = y + (height - textHeight) / 2 + metrics.getAscent();
        
        g2d.drawString(text, textX, textY);
    }
    
    /**
     * 在指定位置绘制一个带有居中文本的矩形块
     * @param g2d Graphics2D对象
     * @param x 矩形块左上角的x坐标
     * @param y 矩形块左上角的y坐标
     * @param width 矩形块的宽度
     * @param height 矩形块的高度
     * @param backgroundColor 矩形块的背景颜色
     * @param textColor 文本颜色
     * @param text 要绘制的文本
     */
    public static void drawBlockWithCenteredText(Graphics2D g2d, int x, int y, int width, int height, 
                                                 Color backgroundColor, Color textColor, String text) {
        if (g2d == null) {
            return;
        }
        
        // 绘制背景
        g2d.setColor(backgroundColor);
        g2d.fillRect(x, y, width, height);
        
        // 绘制文本
        g2d.setColor(textColor);
        drawCenteredString(g2d, text, x, y, width, height);
    }
}